<template>
  <div>
    <UploadExcel :on-success="onSuccess" />
  </div>

</template>

<script>
import { importEmployee } from '@/api/employee'
export default {
  methods: {
    async onSuccess(data) {
      // 这是Excel上传成功后执行的回调函数,成功后可以获得data(由uploadExcel中执行获得),data中有表头header和results结果数组
    //   console.log(data)
    // 因为data.result的数据类型不符合后台规定的要求,不能直接传给后台,需要进行翻译
    // {姓名:'高大山',工号:20089}>>>{username:'高大山',workNumber:20089}
    // 自定义一个字典,用于翻译
      const userRelations = {
        '入职日期': 'timeOfEntry',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber'
      }
      // newdata是经过翻译后的数据
      const newData = data.results.map(item => {
        //   遍历的每个item是{姓名:'高大山',工号:20089}这种形式的对象数据
        const newItem = {}
        // 对每个item对象进行遍历,获取到value值('高大山')
        for (const key in item) {
          // 获取到高大山,20089
          let newValue = item[key]
          // 获取字典中的英文名作为newdata的键,userRelations和item里的key是一一对应的
          const newKey = userRelations[key]
          // 默认情况下数据直接合并即可，但转正日期correctionTime和入职时间timeOfEntry是时间戳形式，需要转换成时间格式才能传给后台
          if (newKey === 'timeOfEntry' || newKey === 'correctionTime') {
            //   调用时间格式处理函数(网上找的处理方法)进行处理,处理后是字符串格式,还需要转换成时间格式
            const timeStr = this.formatExcelTime(newValue)
            newValue = new Date(timeStr)
          }
          // 将新数据进行合并填入到newitem,多个newitem组合成newdata
          newItem[newKey] = newValue
        }
        return newItem
      })
      console.log('更新后', newData)
      // 发送上传请求
      await importEmployee(newData)
      // 提示用户
      this.$message.success('导入成功')
      // this.$emit('loadPage')
      // 返回上一页
      this.$router.back()
    },
    // 专门处理 excel 时间问题工具
    formatExcelTime(num, format = '-') {
      num = Number(num)	// 强制类型转化，以防传来的值是字符串
      let millisecond = 0	// 转化后的毫秒数
      if (num > 60) {
        millisecond = (num - 25569) * 60 * 60 * 24 * 1000
      } else {
        millisecond = (num - 25568) * 60 * 60 * 24 * 1000
      }
      const date = new Date(millisecond)	// 根据转化后的毫秒数获取对应的时间
      const yy = date.getFullYear()
      const mm = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
      const dd = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
      return yy + format + mm + format + dd	// 返回格式化后的日期字符串
    }
  }
}
</script>

<style>

</style>
